import config from '@/config/app.js'

/**
 * 统一请求工具
 * @param {Object} options - 请求配置
 * @returns {Promise}
 */
export function request(options) {
	return new Promise((resolve, reject) => {
		// 获取本地存储的token
		const token = uni.getStorageSync('token')
		
		// 设置默认请求头
		const header = {
			'Content-Type': 'application/json',
			...options.header
		}
		
		// 如果有token，添加到请求头
		if (token && !header.token) {
			header.token = token
		}
		
		uni.request({
			url: `${config.AI_HTTP_REQUEST_URL}${options.url}`,
			method: options.method || 'GET',
			data: options.data || {},
			header: header,
			success: (res) => {
				// 统一处理响应
				if (res.statusCode === 200) {
					resolve(res.data)
				} else if (res.statusCode === 401) {
					// token过期，清除本地存储
					uni.removeStorageSync('token')
					uni.removeStorageSync('userInfo')
					
					uni.showToast({
						title: '登录已过期，请重新登录',
						icon: 'error'
					})
					
					// 跳转到登录页面
					setTimeout(() => {
						uni.navigateTo({
							url: '/pages/user/login/index'
						})
					}, 1500)
					
					reject(new Error('登录已过期'))
				} else {
					reject(new Error(`请求失败: ${res.statusCode}`))
				}
			},
			fail: (err) => {
				console.error('请求失败:', err)
				reject(err)
			}
		})
	})
}

/**
 * GET请求
 * @param {string} url - 请求地址
 * @param {Object} data - 请求参数
 * @param {Object} header - 请求头
 * @returns {Promise}
 */
export function get(url, data = {}, header = {}) {
	return request({
		url,
		method: 'GET',
		data,
		header
	})
}

/**
 * POST请求
 * @param {string} url - 请求地址
 * @param {Object} data - 请求参数
 * @param {Object} header - 请求头
 * @returns {Promise}
 */
export function post(url, data = {}, header = {}) {
	return request({
		url,
		method: 'POST',
		data,
		header
	})
}

/**
 * PUT请求
 * @param {string} url - 请求地址
 * @param {Object} data - 请求参数
 * @param {Object} header - 请求头
 * @returns {Promise}
 */
export function put(url, data = {}, header = {}) {
	return request({
		url,
		method: 'PUT',
		data,
		header
	})
}

/**
 * DELETE请求
 * @param {string} url - 请求地址
 * @param {Object} data - 请求参数
 * @param {Object} header - 请求头
 * @returns {Promise}
 */
export function del(url, data = {}, header = {}) {
	return request({
		url,
		method: 'DELETE',
		data,
		header
	})
}

/**
 * 检查登录状态
 * @returns {boolean}
 */
export function checkLogin() {
	const token = uni.getStorageSync('token')
	return !!token
}

/**
 * 获取用户信息
 * @returns {Object|null}
 */
export function getUserInfo() {
	return uni.getStorageSync('userInfo')
}

/**
 * 清除登录信息
 */
export function clearLogin() {
	uni.removeStorageSync('token')
	uni.removeStorageSync('userInfo')
} 